#include "wifi.h"
#include "uart.h"
#include "delay.h"
#include "string.h"

void SendAT(uint8_t *p)
{
	while(*p!='\0')
	{
		while((USART2->SR & (0X01<<7))==0);  //等待发送缓冲区为空
		USART2->DR=*p;
		p++;
	}
}

//函数：发送指定的指令，并且判断是否接收到期望的响应
//参数说明：str-待发送的AT指令
//          ack-期望收到的响应
//返回值：0成功  其他：失败
uint8_t WIFISendAT(uint8_t* str,uint8_t* ack)
{
	uint16_t timeout=0;
	//发送指令
	SendAT(str);
	
	while(1)
	{
		//等待应答
		while(!WifiRev.RevOver)
		{
       timeout++;
			 Delayms(1);
			if(timeout>=7000)
				return 1;
		}
		WifiRev.RevOver=0;
		timeout=0;
		
		//判断应答是否是所期待的
		if(NULL!=strstr((const char *)WifiRev.WifiRevBuf,(const char *)ack))
			return 0;
	}
}

//WIFI自动连接阿里云服务器
//返回值：0成功  其他：失败
uint8_t WifiInit(void)
{
	uint8_t ret;
	
	//退出透传
	SendAT((uint8_t*)"+++");
	Delayms(100);
	//恢复出厂设置
	ret=WIFISendAT((uint8_t*)"AT+RESTORE\r\n",(uint8_t*)"OK");
	if(ret)
		return 6;
	
	Delayms(500);
	ret=WIFISendAT((uint8_t*)"AT+CWMODE_DEF=1\r\n",(uint8_t*)"OK");
	
	if(ret)
		return 1;
	ret=WIFISendAT((uint8_t*)"AT+CWJAP_DEF=\"zxy\",\"123456789\"\r\n",(uint8_t*)"OK");
	
	if(ret)
		return 2;
	ret=WIFISendAT((uint8_t*)"AT+CIPSTART=\"TCP\",\"a15MWs3AfDR.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n",(uint8_t*)"OK");
	
	if(ret)
		return 3;
	ret=WIFISendAT((uint8_t*)"AT+CIPMODE=1\r\n",(uint8_t*)"OK");
	
	if(ret)
		return 4;
	ret=WIFISendAT((uint8_t*)"AT+CIPSEND\r\n",(uint8_t*)"OK");
	
	if(ret)
		return 5;
	
	return 0;
}

